Zabbix 应用常见问题和故障解决方法
本文整理了Zabbix需掌握的部分知识、常见问题和一些故障解决方法。供大家学习参考。
1、Zabbix 是怎么实施监控的?
一个监控系统运行的大概的流程是这样的:
agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
主动监测通信过程如下:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:
获取ACTIVE ITEMS列表
Agent打开TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据
主动检测提交数据过程如下:
Agent建立TCP连接
Agent提交items列表收集的数据
Server处理数据,并返回响应状态
关闭TCP连接
被动监测通信过程如下:
Server打开一个TCP连接
Server发送请求agent.pingn
Agent接收到请求并且响应
Server处理接收到的数据
关闭TCP连接
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
2、Zabbix 自动发现是怎么做的?
zabbix发现有3种类型:
1、自动网络发现 ( Network discovery)
2、主动客户端自动注册 ( Active agent auto-registration )
3、低级别发现 ( low-level discovery )
自动发现的做法:
1、首先需要在模板当中创建一个自动发现的规则,这个地方只需要一个名称和一个键值。
2、过滤器中间要添加你需要的用到的值宏。
3、然后要创建一个监控项原型,也是一个名称和一个键值。
4、然后需要去写一个这样的键值的收集。
自动发现实际上就是需要首先去获得需要监控的值,然后将这个值作为一个新的参数传递到另外一个收集数据的item里面去。
3、Zabbix监控的客户端是怎么进行批量安装的?
推荐使用Ansible等自动化软件来进行批量安装。将安装过程编写执行脚本,然后再使用Ansible来进行批量安装。
1、使用命令生成密钥。
2、将公钥发送到所有安装zabbix客户端的主机。
3、安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。
4、创建一个安装zabbix客户端的脚本。
5、执行该脚本。
6、验证。
4、Zabbix4.0 中有些报警不会立即触发报警邮件,这种问题该如何排查?
【问题描述】手动关闭问题时却会立即发送报警邮件,比如更改hostname,监控项中信息类型为字符或文本会出现这种情况。
@chpps2000:
建议按照触发器描述查下triggers表,按照triggerid查function表,确认表达式和监控项有没有问题,如果确定没问题的话查下event表,看看触发器是否生成事件,看事件后面的actionid和mediaid确定是否发出了报警并通知。
5、Zabbix可以监控端口带宽速度限制吗?
@skey_deng:
根据实际操作经验是不能获取到带宽速度限制的参数的,如果使用qos的话,监控是没有办法获取到数据的,而且qos是动态的,更难监控,目前我们常用的方法是有固定带宽,比如总行和各支行及网点的数据传输,带宽是固定的,我们设置一个准确值给他,然后用实时带宽对比这个设置值,确定当前带宽占用的比率。
上面的方法可以让你看到带宽的占用情况,如果你是为了解决带宽占用告警的问题,那么就需要采用动态基线,动态阈值的方式来实现监控,避免告警风暴的出现,但是这涉及到页面的开发,和算法的研究,然后呈现出动态的告警,目前zabbix应该没有办法实现。
6、自动化运维系统建设中,监控经常会用到 Zabbix ,那么使用它监控常用关系型数据库 DB2、Oracle、MySQL、SQLServer 时,有什么比较全面的监控模板?
@李承轩:
Oracle可以使用orabbix插件监控,动手能力强的可以通过ODBC去监控。
MySQL可以使用Percona提供的一个模板监控,动手能力强的可以用shell、Python自行监控。
@TonyWang:
补充下:
目前我们基于Zabbix对Oracle、mysql和SQLServer都监控了:
Oracle 可以用Orabbix,不过Orabbix软件很久没更新,对于新的Oracle版本可能支持不好,对RAC环境也没有现成的配置文件。不好Orabbix好处是可以自己定义监控项(通过定义获取监控的SQL语句),譬如可以根据需要增加阻塞监控、表空间使用率等监控
SQLServer 一般是通过读取windows性能计数器来获取监控数据,需要解决同一台服务器多实例问题
MySQL目前是通过Zabbix的自定义监控项实现,执行shell脚本
7、Zabbix配置了IPV6的地址,怎么样可以监控到网外的某一个IPV6地址的网络质量?
@小民工:
1.如仅是到探测给地址网络质量,可使用ping探测,设定探测周期及阈值,如:设定探测间隔为1s,当延时连续3次大于50ms则触发报警;
2.如涉及到该地址的具体服务,可以使用具体协议,如tcp/udp,telnet/http请求来作为具体探测方式;
注:此类探测工具,zabbix官方可以下载到相应模板,导入现有系统做自定义修改后即可使用。
8、Zabbix_server正常运行,却提示服务器没有运行的解决办法
@许远:
Zabbix突然出现了:
Zabbix server is not running:the information displayed may not be current
Zabbix 服务器没有运行:显示的信息可能不是当前的
一、SELinux未关闭
selinux一定要关闭,如果开启selinux,可能zabbix的discovery都不能正常使用
关闭selinux方法:
1、修改/etc/selinux/config文件中的SELINUX=“”值为disable,然后重启。
2、如果不想重启,使用setenforce 0
setenforce 1,selinux为enforcing模式
setenforce 0,selinux为permissive模式
二、zabbix web 目录下面,$ZBX_SERVER 是否为IP,如果是localhost,ping一下localhost是否能解析。如果不能,需要/etc/hosts文件里增加相应的项目。
三、查看php的fsockopen模块是否启用。
方法一:
第一步:
php.ini文件中查找
allow_url_fopen = On
使其值为On
第二步:
php.ini文件中查找
extension=php_openssl.dll
如果前面有分号,去掉分号
第三步:
重启web服务器,apache或IIS
方法二:
1. vi php.ini
找到 allow_url_fopen 这个参数设置成 On,即
allow_url_fopen = On
2. 让你的php支持 opensll扩展。
默认,是没有openssl扩展的,只能重新编译安装。
yum install openssl openssl-devel
cd /usr/local/src/php-5.2.14/ext/openssl
/usr/local/php/bin/phpize
./configure –with-openssl –with-php-config=/usr/local/bin/php-config
make && make install
看提示,把编译成的openssl.so 拷贝到你在php.ini 中指定的 extension_dir 下
3. vi php.ini
加入
extension=openssl.so
4. 重启web server
四、监控对象占满了trapper进程导致前端与server无法通信
“At least one trapper process must be running to display server availability and view queue in the frontend.”——Trapper进程用于接收前端查询server可用性及队列的请求将StartTrappers=20调整到StartTrappers=100,重启zabbix-server。
9、Zabbix监控虚拟主机告警 Lack of free swap space on Zabbix server 解决办法
@minseo:
Zabbix监控虚拟机的时候有时候会报一下告警
是因为Zabbix监控没有考虑虚拟主机的交换空间情况
解决办法修改配置
10、Zabbix4.4 启动失败的分析与解决
@泊涯:
问题:
在安装配置好zabbix后无法正常启动,原因是SELINUX设置问题导致启动失败。
故障分析:
[root@localhost zabbix]# systemctl start zabbix-server.service
Job for zabbix-server.service failed because a configured resource limit was exceeded. See "systemctl status zabbix-server.service" and "journalctl -xe" for details.
[root@localhost zabbix]# journalctl -xe
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Unit zabbix-server.service has begun starting up.
1月 07 15:21:17 localhost.localdomain systemd[1]: PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start.
1月 07 15:21:17 localhost.localdomain systemd[1]: zabbix-server.service never wrote its PID file. Failing.
1月 07 15:21:17 localhost.localdomain systemd[1]: Failed to start Zabbix Server.
-- Subject: Unit zabbix-server.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Unit zabbix-server.service has failed.
-- The result is failed.
1月 07 15:21:17 localhost.localdomain systemd[1]: Unit zabbix-server.service entered failed state.
1月 07 15:21:17 localhost.localdomain systemd[1]: zabbix-server.service failed.
1月 07 15:21:17 localhost.localdomain polkitd[804]: Unregistered Authentication Agent for unix-process:6787:8831344 (system bus name
1月 07 15:21:24 localhost.localdomain polkitd[804]: Registered Authentication Agent for unix-process:6797:8832061 (system bus name :
1月 07 15:21:27 localhost.localdomain systemd[1]: zabbix-server.service holdoff time over, scheduling restart.
1月 07 15:21:27 localhost.localdomain systemd[1]: Starting Zabbix Server...
-- Subject: Unit zabbix-server.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Unit zabbix-server.service has begun starting up.
1月 07 15:21:27 localhost.localdomain systemd[1]: PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start.
1月 07 15:21:27 localhost.localdomain systemd[1]: zabbix-server.service never wrote its PID file. Failing.
1月 07 15:21:27 localhost.localdomain systemd[1]: Failed to start Zabbix Server.
-- Subject: Unit zabbix-server.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Unit zabbix-server.service has failed.
-- The result is failed.
1月 07 15:21:27 localhost.localdomain systemd[1]: Unit zabbix-server.service entered failed state.
1月 07 15:21:27 localhost.localdomain systemd[1]: zabbix-server.service failed.
1月 07 15:21:27 localhost.localdomain polkitd[804]: Unregistered Authentication Agent for unix-process:6797:8832061 (system bus name
lines 1907-1944/1944 (END)
Last login: Tue Jan 7 23:24:43 2020 from 10.100.81.67
查看 zabbix 日志分析:
发现日志提示权限问题:
5966:20200107:145500.376 using configuration file: /etc/zabbix/zabbix_server.conf
5966:20200107:145500.376 cannot set resource limit: [13] Permission denied
5966:20200107:145500.376 cannot disable core dump, exiting...
5976:20200107:145506.314 Starting Zabbix Server. Zabbix 4.4.4 (revision 3131fdac04
故障处理:
优化修改SELINUX=disabled
[root@localhost selinux]# vi config
This file controls the state of SELinux on the system.
SELINUX= can take one of these three values:
enforcing - SELinux security policy is enforced.
permissive - SELinux prints warnings instead of enforcing.
disabled - No SELinux policy is loaded.
SELINUX=disabled
SELINUXTYPE= can take one of three two values:
targeted - Targeted processes are protected,
minimum - Modification of targeted policy. Only selected #processes are protected.
mls - Multi Level Security protection.
SELINUXTYPE=targeted
重新启动:
[root@localhost ~]# systemctl start zabbix-server.service
[root@localhost ~]# systemctl status zabbix-server.service
● zabbix-server.service - Zabbix Server
Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
Active: active (running) since 二 2020-01-07 15:26:56 CST; 6s ago
Process: 1529 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 1531 (zabbix_server)
CGroup: /system.slice/zabbix-server.service
└─1531 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
1月 07 15:26:56 localhost.localdomain systemd[1]: Starting Zabbix Server...
1月 07 15:26:56 localhost.localdomain systemd[1]: zabbix-server.service: Supervising process 1531 which is not our child. ...exits.
1月 07 15:26:56 localhost.localdomain systemd[1]: Started Zabbix Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#
至此,问题已经得到解决。
总结:
最后要提醒各位同行,一般在安装一些开源软件,如MYSQL、POSTGRES、zabbix、openshift等,在安装前先检查下系统对应版本是否与需安装的软件兼容性、在检查下下,防火墙、安全等是否开启,如下:
1、iptables开启和关闭;
2、SELinux开启和关闭;
3、CentOS 6和CentOS 7 firewalld防火墙的开与关等。
11、Zabbix监控界出现“Zabbix poller processes more than 75% busy ”报警?
@小雄free:
线上部署的zabbix监控环境运行一段时间后,突然出现了报警“Zabbix poller processes more than 75% busy“ 。其实,Zabbix的监控警报有很多种,比较常见的几个莫过于内存耗尽,网络不通,IO太慢还有这个“Zabbix poller processes more than 75% busy”了。一开始的时候因为这个即不影响使用也持续一会儿就自行解决就没有多在意。然后随着数据库的增大,Zabbix消耗的内存可是越来越多,Poller processes(轮询)开始天天Busy了.
最后,发现解决这个问题很简单。可以增加Zabbix Server启动时初始化的进程数量,但这样做直接增加了轮询的负载量,内存配置充足的情况下完全可以这么做。
具体编辑Zabbix Server的配置文件/etc/zabbix/zabbix_server.conf,找到配置StartPollers的段落:
Option: StartPollers
Number of pre-forked instances of pollers.
Mandatory: no
Range: 0-1000
Default:
StartPollers=5
取消StartPollers前的#号注释,修改5为10或者更大【由于线上机器内存64G的,我此处修改成60或80】
修改后,重启zabbix_server
pkill -9 zabbix_server
/usr/local/zabbix/sbin/zabbix-server
过一会儿就发现触发器里已经没有类似的警告了。
当然,我们也可以额定时写个脚本来重启zabbix_server来降低负载
下面是脚本/root/zabbix-restart.sh
!/bin/bash
/usr/bin/pkill zabbix_server
/usr/local/zabbix/sbin/zabbix_server
然后crontab做计划任务
0 3 * /bin/bash -x /root/zabbix-restart.sh > /dev/null 2>&1
12、Zabbix监控图里获取不到数据?
@小雄free:
可以先在服务端的命令行里通过命令:
# /usr/local/zabbix/bin/zabbix_get -s 192.168.1.10 -p 10050 -k "mysql.status[Uptime]"
其中:-s后面跟的是被监控机的ip地址;-k后面跟的是监控项的键值,这个可以在zabbix页面里对应监控项里查到。如果在服务端通过以上命令能获取到数据,那么在zabbix监控页面的图形里显示获取不到数据,可能就是web页面里的配置问题了。
13、内存溢出导致zabbix_server服务关闭?
@相逢即是美丽心情:
14721:20170714:095330.028 [file:dbconfig.c,line:452] zbx_mem_malloc(): out of memory (requested 80 bytes)
14721:20170714:095330.028 [file:dbconfig.c,line:452] zbx_mem_malloc(): please increase CacheSize configuration parameter
14719:20170714:095330.331 One child process died (PID:14721,exitcode/signal:1). Exiting ...
14719:20170714:095332.332 syncing history data...
14719:20170714:095332.332 syncing history data done
14719:20170714:095332.332 syncing trends data...
14719:20170714:095332.694 syncing trends data done
14719:20170714:095332.695 Zabbix Server stopped. Zabbix 2.4.7 (revision 56694).
zabbix内存溢出。
/etc/zabbix/zabbix_server.conf 或者/etc/zabbix/zabbix_agent.conf
添加或修改CacheSize,或CacheSize=8M
改为CacheSize=1024M (这个值根据自己的需求)
重启服务zabbix_server
14、Zabbix给新机器添加监控,按正常操作完成后,发现主机那一栏最后的灯不亮
@小雄free:
如下截图:
来回检查了好几遍,没发现问题,删除后重新加了两遍,还是灯不亮,后来在网上找相关的解决方法,试了发现不是自己遇到的问题,等过了一段时间发现灯正常亮了。
解决办法:
验证zabbix_agent是否添加成功的方法,也适用其他问题。
1、检查防火墙和SELinux是否关闭。
2、添加完成后在zabbix_server上查看日志,如果不知道位置,请查看zabbix_server.conf配置文件
如果在日志中发现主机名或ip不能被发现,就检查/etc/hosts文件中ip和主机名,是否有写错的问题。
3、查看zabbix_agent.conf中配置的hostname=xxx,这里是否有些错的情况。
Server=zabbix_server的ip
ServerActive=zabbix_server的ip
hostname=zabbix_agent的主机名
4、检查zabbix_agent是否启动,一般都不会忘记,但不排除犯傻的情况。
5、如果以上检查都没有发现错误。
在zabbix_server的web页面-监测中-最新数据,选择新加的主机,查看是否有最新数据(记得链接一个系统模板,不然你啥也看不到),如果有正常数据刷新,则不用管灯是否亮了,已经能正常采集到数据了。如果等了一两分钟还没有数据(系统模板的监控项采集数据一般30秒一次,所以正常的话一两分钟已经有结果返回了),请返回第一条错误,自己仔细检查。
总结:以上是一些经验用来检查错误的,对于其他一些问题也是这个套路,经验分享给大家。
今天遇到这问题是因为zabbix_server端测试agent端数据延迟导致的。所以如果你也遇到了这个问题,不用在意,在zabbix_server能正常采集数据进行监控,就表明监控已经添加成功。
15、zabbix中找不到对应的触发器?
【问题描述】Zabbix监控交换机端口流量,监控项中关联了触发器,触发器状态已启用,也可以正常收到触发器的邮件告警。现在想禁用触发器,发现只能找到部分端口的触发器,找不到的触发器在监控项中有关联,也正常工作。这个为啥?
@youki2008:
对网络设备的的模板一般会用自动发现来创建的item,你可以在主机,模板的自动发现那里找找。
@Zabbix大叔_乐维:
如果触发器有在工作的话,那么说明触发器是在模板里的。这时候只要查看模板的触发器,就能找到触发器并且停用就行。
16、Zabbix_server执行window脚本出现中文乱码如何解决
@刘俊源:
场景分析:
A企业员工啊旺在zabbix _server 上,执行了一个通过agent调用远程window主机脚本的操作,但是由于该脚本的输出结果带有中文,啊旺在zabbix _server 的界面看到的内容是一串乱码字符,他根本不知道远程脚本是否执行成功。于是他想把脚本的输出结果改成英文提示success或者error。但由于该脚本不是由啊旺编写的。所以他不知道应该修改脚本的那个位置,才能使显示为英文。因此,本文的目的就是为了解决,zabbix_server调用window的远程脚本带有中文的显示乱码问题。
第一步:编写一个window上输出中文的bat脚本
在window服务器上执行bat脚本是否可以输出结果
Window主机上执行bat脚本,结果正常输出。
第二步:在zabbix _server 上创键执行该文件的脚本
因为该脚本是window上的脚本,所以要选择执行在zabbix客户端
在脚本存放的主机上执行该脚本
执行后的结果,如下图,中文显示乱码,数字显示正常(英文也显示正常)
第三步:编写转码的bat脚本实现,中文的正常输出
文件的路径要用绝对值,否则调用的时候会出现报错
第一行:把test .bat 脚本执行结果的内容输出到 1. txt文件
第二行,把test .txt 这个文件转码为utf 8 的格式
(注意,第二行,源文件名不能和转码后的名字一样,否则会使转码后的文件为空)
即不能使用 powershell -c "Get-Content F:桌面C盘1.txt|Out-File -Encoding utf8 F:桌面C盘1.txt"
第三行是查看test .bat 脚本执行的就够
第四,五行删除刚才生成的文件
重新修改执行window脚本
Ok , 大功告成。中文显示正常。
本文综合twt社区内容及部分网络内容,作者见正文标注 如有任何问题,可点击文末阅读原文,到社区原文下评论交流 觉得本文有用,请转发或点击“在看”,让更多同行看到
欢迎关注社区 "监控"技术主题 ,将会不断更新优质资料、文章。地址:
http://www.talkwithtrend.com/Topic/3937
下载 twt 社区客户端 APP
长按识别二维码即可下载
或到应用商店搜索“twt”
长按二维码关注公众号
*本公众号所发布内容仅代表作者观点,不代表社区立场